//https://leetcode.cn/problems/find-k-closest-elements/
//658. 找到 K 个最接近的元素
class Solution {
public:
    vector<int> findClosestElements(vector<int>& arr, int k, int x) {
        auto it = lower_bound(arr.begin(), arr.end(), x);
        vector<int> a;
        int i = it - arr.begin()-1, j = i + 1;

        while(k--){
            if(i>= 0 && j<arr.size()){
                if((abs(arr[i] - x) <= abs(arr[j] - x) )){
                    a.push_back(arr[i--]);
                }
                else{
                    a.push_back(arr[j++]);
                }
            }
            else if( i >= 0){
                a.push_back(arr[i--]);
            }
            else
                a.push_back(arr[j++]);

        }


        sort(a.begin(), a.end());
        return a;
    }
};
/*//这里的最靠近说明连续，所以考虑使用滑动窗口
//第一次尝试2个小时失败了，原因在于没有二分，为什么要二分，应为有大于x,有小于x的
//下次，1、先尝试排序法，2、再来滑动窗口法
class Solution {
public:
    vector<int> findClosestElements(vector<int>& arr, int k, int x) {
        sort( arr.begin(), arr.end(),[x](int a, int b) -> bool {
                return abs(a - x) < abs( b - x) || abs(a - x) == abs( b - x) & a < b;
        });
        sort(arr.begin(), arr.begin()+k);
        return vector<int>(arr.begin(), arr.begin() + k);
    }
};*/